// course/announcement/announcementDetails/announcementDetails.js
Page({
  /**
   * 页面的初始数据
   */
  data: {
    announcement: {}
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    console.log('详情页接收的原始参数:', options);
    const { id } = options;
    console.log('提取的ID参数值:', id, '类型:', typeof id);
    this.fetchAnnouncementDetails(id);
  },

  /**
   * 获取公告详情数据
   */
  fetchAnnouncementDetails(id) {
      // 完整的参数验证和转换
      console.log('原始ID参数:', id, '类型:', typeof id);
      
      // 验证参数存在性
      if (id === undefined || id === null || id === '') {
        console.error('ID参数不存在或为空');
        wx.showModal({
          title: '错误',
          content: '未指定公告ID参数',
          showCancel: false
        });
        this.setData({ announcement: this.getDefaultAnnouncement() });
        return;
      }
      // 转换为整数
      let noticeId = parseInt(id, 10);
      console.log('转换后的ID:', noticeId, '类型:', typeof noticeId);

      // 验证整数有效性
      if (isNaN(noticeId) || !Number.isInteger(noticeId) || noticeId <= 0) {
        console.error('无效的整数ID:', noticeId);
        wx.showModal({
          title: '错误',
          content: `无效的公告ID: ${id}\n请提供有效的整数ID`,
          showCancel: false
        });
        this.setData({ announcement: this.getDefaultAnnouncement() });
        return;
      }


    // 最终验证ID格式
    console.log('最终验证 - 转换前ID:', id, '类型:', typeof id);
    console.log('最终验证 - 转换后ID:', noticeId, '类型:', typeof noticeId);
    if (!Number.isInteger(noticeId) || noticeId <= 0) {
      console.error('最终验证失败 - 无效的ID:', noticeId);
      return;
    }
    console.log('API请求URL:', `http://localhost:8080/notice/${noticeId}`);
    // 所有验证通过，发送API请求
      wx.request({
      url: `http://localhost:8080/notice/${noticeId}`, // 直接使用完整URL确保正确性
      method: 'GET',
      // 移除data参数，ID已在URL中
      success: (res) => {
        console.log('=== API请求详情 ===');
        console.log('请求URL:', `http://localhost:8080/notice/${noticeId}`);
        console.log('请求参数:', { noticeId: noticeId }); // 显示转换后的整数ID
        console.log('状态码:', res.statusCode);
        console.log('完整响应:', res);
        console.log('响应数据:', res.data);
        console.log('====================');

        // 同时检查HTTP状态码和后端业务状态码
        if (res.statusCode === 200 && res.data.code === 200) {
          // 尝试多种数据提取方式
          const possibleDataPaths = [
            res.data.data,
            res.data.notice,
            res.data,
            {}
          ];
          
          let announcementData = {};
          for (const path of possibleDataPaths) {
            if (path && (path.noticeName || path.noticeContext)) {
              announcementData = path;
              break;
            }
          }
          
          console.log('最终选择的数据:', announcementData);
          
          if (Object.keys(announcementData).length > 0) {
            this.setData({ announcement: announcementData });
          } else {
            wx.showModal({
              title: '数据错误',
              content: '未能从服务器获取有效公告数据',
              showCancel: false
            });
            this.setData({ announcement: this.getDefaultAnnouncement() });
          }
        } else {
          wx.showModal({
            title: '网络错误',
            content: `服务器返回状态码: ${res.statusCode}\n请检查API服务是否正常运行`,
            showCancel: false
          });
            this.setData({ announcement: this.getDefaultAnnouncement() });
          }
        },
        fail: (err) => {
        console.error('API调用失败:', err);
        wx.showModal({
          title: '请求失败',
          content: '无法连接到服务器，请检查网络连接',
          showCancel: false
        });
        this.setData({ announcement: this.getDefaultAnnouncement() });
      }
    });
  },
  
  /**
   * 获取默认公告数据
   */
  getDefaultAnnouncement() {
    return {
      noticeName: '示例公告标题',
      noticeTime: new Date().toLocaleDateString(),
      noticeContext: '<div style="padding:20px;"><p>这是一条示例公告内容</p><p>如果您看到此消息，说明:</p><p>1. 可能网络连接有问题</p><p>2. 服务器暂时不可用</p><p>3. 数据格式不匹配</p><p>请检查API服务状态或联系开发人员</p></div>'
    };
  },
      success: (res) => {
        console.log('状态码:', res.statusCode);
        console.log('响应数据:', res.data);
        if (res.statusCode === 200) {
          // 尝试多种数据提取方式，适应不同后端结构
          const announcementData = res.data.data || res.data.notice || res.data || {};
          console.log('提取到的公告数据:', announcementData);
          
          // 检查是否有必要的字段
          if (announcementData.noticeName || announcementData.noticeContext) {
            this.setData({ announcement: announcementData });
          } else {
            wx.showToast({ title: '数据格式不正确', icon: 'none' });
            this.setData({
              announcement: {
                noticeName: '公告标题',
                noticeTime: '2023-01-01',
                noticeContext: '这是一条示例公告内容，实际内容将在数据加载成功后显示。'
              }
            });
          }
        } else {
          wx.showToast({ title: '服务器错误: ' + res.statusCode, icon: 'none' });
          this.setData({
            announcement: {
              noticeName: '加载失败',
              noticeTime: '',
              noticeContext: '无法连接到服务器，请检查网络连接后重试。'
            }
          });
        }
      success: (res) => {
        console.log('公告详情数据:', res.data);
        if (res.statusCode === 200) {
          if (res.data.code === 200 && res.data.data) {
            this.setData({
              announcement: res.data.data
            });
          } else {
            wx.showToast({ title: '获取数据失败', icon: 'none' });
            this.setData({ announcement: { noticeName: '暂无标题', noticeTime: '暂无时间', noticeContext: '暂无内容' } });
          }         }        fail: (err) => {
          console.error('API请求失败详情:', err);
          const errorMsg = err.errMsg || '未知错误';
          wx.showToast({ title: `请求失败: ${errorMsg}`, icon: 'none', duration: 3000 });
          this.setData({
            announcement: {
              noticeName: '请求失败',
              noticeTime: '',
              noticeContext: `错误详情: ${errorMsg}\n请检查网络连接或联系管理员`
            }
          });
        }
      }

    },
  })

